/* eslint-disable */
import s3 from '@auth0/s3';
import path from 'path';
import mongoose from 'mongoose';
import { User } from '../models/user';
import Project from '../models/project';
import async from 'async';
require('dotenv').config({ path: path.resolve('.env') });
mongoose.connect('mongodb://localhost:27017/p5js-web-editor');
mongoose.connection.on('error', () => {
  console.error(
    'MongoDB Connection Error. Please make sure that MongoDB is running.'
  );
  process.exit(1);
});

// let client = s3.createClient({
//   maxAsyncS3: 20,
//   s3RetryCount: 3,
//   s3RetryDelay: 1000,
//   multipartUploadThreshold: 20971520, // this is the default (20 MB)
//   multipartUploadSize: 15728640, // this is the default (15 MB)
//   s3Options: {
//     accessKeyId: `${process.env.AWS_ACCESS_KEY}`,
//     secretAccessKey: `${process.env.AWS_SECRET_KEY}`,
//     region: `${process.env.AWS_REGION}`
//   },
// });

const CHUNK = 100;
Project.count({})
  .exec()
  .then((numProjects) => {
    console.log(numProjects);
    let index = 0;
    async.whilst(
      () => {
        return index < numProjects;
      },
      (whilstCb) => {
        Project.find({})
          .skip(index)
          .limit(CHUNK)
          .exec((err, projects) => {
            async.eachSeries(
              projects,
              (project, cb) => {
                console.log(project.name);
                async.eachSeries(
                  project.files,
                  (file, fileCb) => {
                    if (
                      file.url &&
                      file.url.includes('s3-us-west-2.amazonaws.com/')
                    ) {
                      file.url = file.url.replace(
                        's3-us-west-2.amazonaws.com/',
                        ''
                      );
                      project.save((err, newProject) => {
                        console.log(`updated file ${file.url}`);
                        fileCb();
                      });
                    } else {
                      fileCb();
                    }
                  },
                  () => {
                    cb();
                  }
                );
              },
              () => {
                index += CHUNK;
                whilstCb();
              }
            );
          });
      },
      () => {
        console.log('finished processing all documents.');
        process.exit(0);
      }
    );
  });
